#!/bin/bash

# 定义用户信息文件和考勤记录文件
USERINFO_FILE="userinfo.dat"
CHECK_FILE="check.dat"

# 检查用户信息是否存在
check_user_exists() {
    local username=$1
    local password=$2
    grep -q "^$username,$password" "$USERINFO_FILE"
}

# 上班签到
check_in() {
    local username=$1
    local current_time=$(date +%H%M)  # 获取当前时间（24小时格式）

    echo "当前签到时间：$current_time"

    if [[ "$current_time" > "0800" ]]; then
        echo "$username 上班迟到，签到时间：$current_time" >> "$CHECK_FILE"
        echo "您已迟到，签到时间：$current_time"
    else
        echo "$username 上班签到，签到时间：$current_time" >> "$CHECK_FILE"
    fi
}

# 下班签出
check_out() {
    local username=$1
    local current_time=$(date +%H%M)  # 获取当前时间（24小时格式）

    echo "当前签出时间：$current_time"

    if [[ "$current_time" < "1800" ]]; then
        echo "$username 早退，签出时间：$current_time" >> "$CHECK_FILE"
        echo "您已早退，签出时间：$current_time"
    else
        echo "$username 正常签出，签出时间：$current_time" >> "$CHECK_FILE"
    fi
}

# 查阅缺勤信息
view_attendance() {
    local username=$1
    echo "查询缺勤信息："
    grep "$username" "$CHECK_FILE"
}

# 用户登录验证
login() {
    echo "请输入用户名："
    read username

    # 输入密码并显示星号
    echo "请输入密码："
    # 禁用回显
    stty -echo
    password=""
    while IFS= read -r -s -n 1 char; do
        # 如果按下回车则结束密码输入
        if [[ "$char" == $'\0' ]]; then
            break
        fi
        # 如果按下Backspace，删除最后一个字符
        if [[ "$char" == $'\177' ]]; then
            password="${password%${password: -1}}"
            echo -ne "\b \b"
        else
            password+="$char"
            echo -n "*"
        fi
    done
    # 恢复回显
    stty echo
    echo

    # 检查用户名和密码
    if check_user_exists "$username" "$password"; then
        echo "登录成功！"
        return 0
    else
        echo "用户名或密码错误！"
        return 1
    fi
}

# 主程序
while true; do
    # 先选择签到、签出等功能
    echo "请选择功能："
    echo "1. 上班签到"
    echo "2. 下班签出"
    echo "3. 缺勤信息查阅"
    echo "4. 退出"
    read -p "请输入选择（1-4）: " choice

    case $choice in
        1) 
            # 选择签到后才要求登录
            if login; then
                check_in "$username"
            fi
            ;;
        2)
            # 选择签出后才要求登录
            if login; then
                check_out "$username"
            fi
            ;;
        3)
            # 选择查看缺勤记录时才要求登录
            if login; then
                view_attendance "$username"
            fi
            ;;
        4)
            echo "退出系统"
            break
            ;;
        *)
            echo "无效选项，请重新选择！"
            ;;
    esac
done
